﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BusinessLogicLayer;
using DataAccessLayer;

namespace ChamCong.LanhDao
{
    public partial class QLPhepCongTac : BasePage
    {
		XinNghiPhepBLL XNPBLL = new XinNghiPhepBLL();
		NhanVienBLL NVBLL = new NhanVienBLL();
		PhongBanBLL PBBLL = new PhongBanBLL();
		CT_ROLE ctr = new CT_ROLE();
        CongBLL CBLL = new CongBLL();
        ThamSoBLL ts = new ThamSoBLL();
        NgayNghiBLL nnBLL = new NgayNghiBLL();
        LoaiCongBLL lcBLL = new LoaiCongBLL();
        QuanLyPhanQuyenBLL pq = new QuanLyPhanQuyenBLL();
        public static string tt, _LoaiCong;
        public static double _SoCong, _SoCongThucNghi, _SoCongThuBay;
		int _MaPB, _MaNV;
        
        protected void Page_Load(object sender, EventArgs e)
        {
            _MaNV = Convert.ToInt32(Session["MaNV"]);
            try
            {
                if (Session["MaNV"] == null)
                {
                    Response.Write("<script>alert('Vui lòng đăng nhập.');history.go(-1);</script>");
                }
                else
                {
                    _MaNV = Convert.ToInt32(Session["MaNV"]);
                    _MaPB = NVBLL.TimPhongBan(_MaNV);

                    tt = Request.QueryString["ThaoTac"];
                    var mp = Request.QueryString["MaPhepCT"];
                    if (tt != null)
                    {
                        bindGridView(tt);
                        bindDetailView(mp, tt);
                    }
                }
            }
            catch (Exception ex)
            {
                sbcMsgBox4.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", ex.Message);
            }
        }

		public void bindDetailView(string _mp, string _tt)
		{
			if (_mp != null)
			{
				dtvCTPhepCT.Visible = true;
                List<PHEPCONGTAC> lstChiTietPhepCT = XNPBLL.ThongTinPhepCT(int.Parse(_mp), _MaPB);
                if (!pq.LayMaRoleTuNV(_MaNV).Contains(1))
                {
                    lstChiTietPhepCT.RemoveAll(b => b.NHANVIEN.MaPB != NVBLL.LayMaPBTuNV(_MaNV) || b.MaNV == _MaNV);
                }
                else
                {

                }
                dtvCTPhepCT.DataSource = lstChiTietPhepCT;
				dtvCTPhepCT.DataBind();
                if (lstChiTietPhepCT.Count > 0)
                {
                    if (_tt == "DSChoDuyet")
                    {
                        btnDuyet.Visible = true;
                        btnKhongDuyet.Visible = true;
                        tbxChuThich.Visible = true;
                        lblChuThich.Visible = true;
                        btQuayLai.Visible = true;
                    }
                }

			}            
		}
		public void bindGridView(string _tt) 
		{
			List<DGVPHEPCONGTAC> DSDonXinPhep = XNPBLL.lstPhepCongTac(_tt, _MaPB);
			if (DSDonXinPhep.Count != 0)
			{
                if (pq.LayMaRoleTuNV(_MaNV).Contains(1))
                {
                    int a = DSDonXinPhep.RemoveAll(b => b.LaTruongPhongBan == false);
                    grvDSPhepCT.DataSource = DSDonXinPhep;
                }
                else
                {
                    List<DGVPHEPCONGTAC> lstLocPB = DSDonXinPhep.Where(b => b.MaPB == NVBLL.LayMaPBTuNV(_MaNV) && b.MaNV != _MaNV).ToList();
                    grvDSPhepCT.DataSource = lstLocPB;
                }
				grvDSPhepCT.DataBind();
			}
			else
			{
                sbcMsgBox4.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Warning, "Thông báo", "Hiện thời không có dữ liệu!");
			}
				
		}
		public string LayLoaiDS()
		{
			string ds;
			if (Request.QueryString["ThaoTac"] == null)
			{
				ds = "TatCa";
			}
			else
			{
				ds = Request.QueryString["ThaoTac"].ToString();
			}
				
			return ds;
		}
		public string ktDuyet(object ttd)
		{
			if (ttd.ToString() == "1")
				return "Đã duyệt";
			else if (ttd.ToString() == "0")
				return "Chờ duyệt";
			return "Không duyệt";
		}
		public string ktTenNV(object tnv)
		{
			int _MaNV = Convert.ToInt32(tnv);

			NHANVIEN NV = NVBLL.LayNhanVien(_MaNV);
			return NV.HoTen;
		}
		public string ktPhongBan(object pb)
		{
			int _MaPB = Convert.ToInt32(pb);

			PHONGBAN PB = PBBLL.LayPhongBan(_MaPB);
			return PB.TenPB;
		}
		protected void btnDuyet_Click(object sender, EventArgs e)
		{
            try
            {
                int MaPhepCT = int.Parse(Request.QueryString["MaPhepCT"]);
                PHEPCONGTAC P = XNPBLL.layThongTinPhepCT(MaPhepCT);

                //sbcMsgBox4.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Success, "Thông báo", "Đã phê duyệt phép!");
                //btnKhongDuyet.Visible = false;
                //btnDuyet.Visible = false;
                if ((XNPBLL.layThongTinPhepCT(MaPhepCT) != null) && (XNPBLL.layThongTinPhepCT(MaPhepCT).TrangThaiDuyet == 0))
                {
                    P.MaPhepCT = MaPhepCT;
                    P.ChuThich = tbxChuThich.Text;
                    P.NguoiDuyet = Convert.ToInt32(Session["MaNV"]);
                    P.NgayDuyet = DateTime.Now;
                    P.TrangThaiDoc = 0;
                    P.TrangThaiDuyet = 1;


                    DateTime tn = P.NgayDi ?? DateTime.MaxValue;
                    DateTime dn = P.NgayLamViecLai ?? DateTime.MaxValue;
                    List<DateTime> allDates = GetAllDatesAndInitializeTickets(tn, dn);
                    double snncl = allDates.Count;
                    if (CBLL.LayDSCongPhep(tn, dn).Count == 0)
                    {
                        if (P.NgayDi != P.NgayLamViecLai) // Nghỉ nhiều ngày
                        {
                            _LoaiCong = "1";
                            _SoCong = lcBLL.LaySoCong(_LoaiCong);
                            //

                            for (int i = 0; i < snncl; i++)
                            {
                                CONG c = new CONG();
                                c.MaNV = P.MaNV ?? int.MaxValue;
                                c.Ngay = allDates[i];

                                if (allDates[i].DayOfWeek == DayOfWeek.Saturday)
                                {

                                    int tt = Convert.ToInt32(ts.LayGiaTri("TTLVT7"));
                                    switch (tt)
                                    {

                                        case 1://Làm buổi sáng thứ 7
                                            _SoCongThucNghi = 0.5f;//phải là _SoCong / 2 
                                            break;
                                        case 2://Làm cả ngày thứ 7
                                            _SoCongThucNghi = _SoCong;
                                            break;
                                        case 3://Không làm thứ 7
                                            _SoCongThucNghi = 0;
                                            break;
                                    }

                                }
                                else
                                {
                                    _SoCongThucNghi = _SoCong;
                                }

                                c.SoCong = _SoCongThucNghi;
                                if (lcBLL.LayMaLoaiCong(_SoCongThucNghi) != null)
                                {
                                    c.MaLoaiCong = lcBLL.LayMaLoaiCong(_SoCongThucNghi);
                                }
                                else
                                {
                                    c.MaLoaiCong = "1";
                                }
                                c.TrangThaiChot = 0;
                                snncl = snncl - _SoCongThucNghi;
                                CBLL.ThemCong(c);

                                allDates.Remove(allDates[i]);
                                if (allDates.Count == 0)
                                {
                                    i = i + (int)snncl + 1;
                                }
                                else
                                {
                                    i--;
                                }
                             
                            }
                        

                        }
                        else
                        {
                            // Nghỉ nửa ngày hoặc 1
                            CONG cc = new CONG();
                            cc.MaNV = P.MaNV ?? int.MaxValue;
                            cc.Ngay = P.NgayDi ?? DateTime.MaxValue;
                            if (tn.DayOfWeek == DayOfWeek.Saturday)
                            {

                                int tt = Convert.ToInt32(ts.LayGiaTri("TTLVT7"));
                                if (tt == 2)//làm cả ngày
                                {
                                    cc.SoCong = 1;
                                    cc.MaLoaiCong = "1";
                                }
                                else if (tt == 1)//làm sáng
                                {
                                    cc.SoCong = 0.5f; //Đúng ra phải lấy số công nghỉ chia 2
                                    cc.MaLoaiCong = "N";
                                }
                            }
                            else
                            {
                                cc.SoCong = 1;
                                cc.MaLoaiCong = "1";
                            }

                            cc.TrangThaiChot = 0;
                            CBLL.ThemCong(cc);

                        }
                            XNPBLL.DuyetPhepCT(P);
                            sbcMsgBox4.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Success, "Thông báo", "Đã duyệt phép!");
                            btnKhongDuyet.Visible = false;
                            btnDuyet.Visible = false;
                    }
                    else
                    {
                        Response.Write("<script>alert('Ngày nghỉ phép đã có và được duyệt, không thể duyệt thêm');history.go(-1);</script>");
                    }
                }
                else
                {
                    sbcMsgBox4.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", "Không thể duyệt, vui lòng kiểm tra lại mã phép và trạng thái duyệt!");
                }
            }
            catch
            {
                //Response.Write(ex);
                Response.Write("<script>alert('Ngày nghỉ phép đã có và được duyệt, không thể duyệt thêm');history.go(-1);</script>");
            }
		}
        public List<DateTime> GetAllDatesAndInitializeTickets(DateTime startingDate, DateTime endingDate)
        {
            List<DateTime> allDates = new List<DateTime>();

            for (DateTime date = startingDate; date <= endingDate.AddDays(-1); date = date.AddDays(1))
            {
                allDates.Add(date);
            }
            for (int i = 0; i < allDates.Count; i++)
            {
                if (allDates[i].DayOfWeek == DayOfWeek.Sunday || nnBLL.KiemTraTonTai(allDates[i]) == true || Convert.ToInt32(ts.LayGiaTri("TTLVT7")) == 3) //HOẶC NGÀY NGHỈ LỄ 
                {
                    allDates.Remove(allDates[i]);
                    i--;
                }
            }
            return allDates;
        }
		protected void btnKhongDuyet_Click(object sender, EventArgs e)
		{
            if (tbxChuThich.Text == "")
            {
                sbcMsgBox4.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Error, "Thông báo", "Vui lòng để lại phải hồi khi không duyệt phép!");                
            }
            else
            {
                PHEPCONGTAC P = new PHEPCONGTAC();
                P.MaPhepCT = Int32.Parse(Request.QueryString["MaPhepCT"]);
                P.ChuThich = tbxChuThich.Text;
                P.NguoiDuyet = Convert.ToInt32(Session["MaNV"]);
                P.TrangThaiDoc = 0;
                XNPBLL.KhongDuyetPhepCT(P);
                sbcMsgBox4.SetTitleText(SBWebControls.sbcMsgBox.eMessageType.Success, "Thông báo", "Không duyệt phép!");
                btnDuyet.Enabled = false;
            }

		}
		public string checkDuyet(object ttd)
		{
			if (ttd.ToString() == "1")
				return "Đã duyệt";
			else if (ttd.ToString() == "0")
				return "Chờ duyệt";
			return "Đang xử lý";
		}

        protected void grvDSPhepCT_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grvDSPhepCT.PageIndex = e.NewPageIndex;
            this.bindGridView(tt);
        }
	}
    
}